#include "Log.h"

using namespace std;

Log::Log(string className) {
	mutex = new ThreadMutex();
	this->className = className;
}

// Genera la carpeta y el archivo de log.
void Log::openLog(string logFile) {
	logFile = "./Log/" + logFile;
	mkdir("Log", 0744);
	char *file = new char[logFile.length() + 1];
	strcpy(file, logFile.c_str());
	cout << " [INFO] Iniciando el Log..." << endl;
	fs.open(file, ofstream::out | ofstream::app);
	fs << "Log iniciado. -- " << tiempo() << endl;
}
// Graba lo recibido por parámetro en el Log.
void Log::info(string datos) {
	char *linea = new char[datos.length() + 1];
	strcpy(linea, datos.c_str());
	mutex->P();
	fs << " " << linea << endl;
	cout << " [INFO] " << linea << endl;
	mutex->V();
}

// Graba lo recibido por parámetro en el Log.
void Log::error(string datos) {
	char *linea = new char[datos.length() + 1];
	strcpy(linea, datos.c_str());
	mutex->P();
	fs << " " << linea << endl;
	cout << " [ERROR] " << linea << endl;
	mutex->V();
}
// Cierrra el log.
void Log::closeLog() {
	fs << "Log finalizado. -- " << tiempo() << endl;
	mutex->P();
	fs.close();
	mutex->V();
	mutex->Eliminar();
}

//obtengo la fecha para el log.
string Log::tiempo() {
	time_t tiempo;
	struct tm *local_time;
	tiempo = time(NULL);
	local_time = localtime(&tiempo);
	return asctime(local_time);
}
